import betterSqlite3Type from "better-sqlite3";

export function InitializeSessionTable(db: betterSqlite3Type.Database): void {
  db.exec(`
        CREATE TABLE IF NOT EXISTS session
        (
            id          INTEGER PRIMARY KEY AUTOINCREMENT,
            ownerId     INTEGER NOT NULL,       -- 会话拥有者
            toId        INTEGER NOT NULL,       -- 消息接受者
            sessionId   TEXT    NOT NULL,       -- 会话id
            chatType    INTEGER NOT NULL,       -- 1:单聊 2:群聊
            sessionType INTEGER NOT NULL,       -- 消息类型
            content     TEXT      DEFAULT NULL, -- session内容
            unread      INTEGER   DEFAULT 0,    -- 未读消息
            isPinned    INTEGER   DEFAULT 0,    -- 0:未置顶 1:已置顶
            isDel       INTEGER   DEFAULT 0,    -- 0:未删除 1:已删除
            createdAt TEXT DEFAULT (strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime')),
            updatedAt TEXT DEFAULT (strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime')),
            CHECK (isPinned IN (0, 1)),
            CHECK (isDel IN (0, 1))
        );

        -- 为用户ID创建索引
        CREATE INDEX IF NOT EXISTS idx_session_userId ON session (ownerId);

        -- 为会话ID创建索引
        CREATE INDEX IF NOT EXISTS idx_session_sessionId ON session (sessionId);

        -- 复合索引：用户ID + 是否删除 + 更新时间
        CREATE INDEX IF NOT EXISTS idx_session_user_del_time ON session (ownerId, isDel, updatedAt);

        -- 为置顶状态创建过滤索引
        CREATE INDEX IF NOT EXISTS idx_session_pinned ON session (isPinned) WHERE isPinned = 1;

        -- 为聊天类型创建索引
        CREATE INDEX IF NOT EXISTS idx_session_chatType ON session (chatType);
    `);
}
